package com.ssy.lingxi.member.merchant.service.web;

import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.*;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.request.UserUpdateEmailVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.request.UserUpdatePasswordVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.request.UserUpdatePayPasswordVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.request.UserUpdatePhoneVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.response.UserAccountAuthQueryVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.response.UserAccountSecurityQueryVO;
import org.springframework.http.HttpHeaders;

/**
 * 系统能力 - 用户账号安全服务接口
 *
 * @author 万宁
 * @version 2.0.0
 * @date 2020-07-06
 */
public interface IMemberAccountSecurityService {

    /**
     * “账户安全”页面，查询用户的手机号码和邮箱，以掩码方式返回
     *
     * @param headers Http头部信息
     * @return 操作结果
     */
    Wrapper<UserAccountSecurityQueryVO> getPhoneAndEmail(HttpHeaders headers);

    /**
     * （通用）检查支付密码是否正确
     *
     * @param headers       Http头部信息
     * @param payPasswordVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> checkPayPassword(HttpHeaders headers, PayPasswordVO payPasswordVO);

    /**
     * 修改登录密码（手机校验码验证）时，发送手机短信验证码
     *
     * @param headers Http头部信息
     * @return 操作结果
     */
    Wrapper<Void> sendChangePasswordSmsCode(HttpHeaders headers);

    /**
     * 修改登录密码（手机校验码验证）时，检查手机短信验证码是否正确
     *
     * @param headers   Http头部信息
     * @param smsCodeVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> checkChangePasswordSmsCode(HttpHeaders headers, SmsCodeVO smsCodeVO);

    /**
     * 修改登录密码（邮箱验证）时，发送邮件验证码
     *
     * @param headers Http头部信息
     * @return 发送结果
     */
    Wrapper<Void> sendChangePasswordEmailCode(HttpHeaders headers);

    /**
     * 修改登录密码（邮箱验证）时，检查邮件验证码是否正确
     *
     * @param headers   Http头部信息
     * @param smsCodeVO 接口参数
     * @return 发送结果
     */
    Wrapper<Void> checkChangePasswordEmailCode(HttpHeaders headers, SmsCodeVO smsCodeVO);

    /**
     * 修改登录密码
     *
     * @param headers      Http头部信息
     * @param userManageVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> changePassword(HttpHeaders headers, UserUpdatePasswordVO userManageVO);

    /**
     * 修改邮箱（手机校验码验证）时，发送手机短信验证码
     *
     * @param headers Http头部信息
     * @return 操作结果
     */
    Wrapper<Void> sendChangeEmailSmsCode(HttpHeaders headers);

    /**
     * 修改邮箱（手机校验码验证）时，检查手机短信验证码是否正确
     *
     * @param headers   Http头部信息
     * @param smsCodeVO 接口参数
     * @return 验证结果
     */
    Wrapper<Void> checkChangeEmailSmsCode(HttpHeaders headers, SmsCodeVO smsCodeVO);

    /**
     * 修改邮箱（邮箱验证）时，发送邮件验证码
     *
     * @param headers Http头部信息
     * @return 发送结果
     */
    Wrapper<Void> sendChangeEmailEmailCode(HttpHeaders headers);

    /**
     * 修改邮箱（邮箱验证）时，检查邮件验证码是否正确
     *
     * @param headers   Http头部信息
     * @param smsCodeVO 接口参数
     * @return 发送结果
     */
    Wrapper<Void> checkChangeEmailEmailCode(HttpHeaders headers, SmsCodeVO smsCodeVO);

    /**
     * 修改邮箱时，向新邮箱发送邮件验证码
     *
     * @param headers Http头部信息
     * @param emailVO 接口参数
     * @return 发送结果
     */
    Wrapper<Void> sendChangeEmailEmailCodeToNew(HttpHeaders headers, EmailVO emailVO);

    /**
     * 修改邮箱
     *
     * @param headers      Http头部信息
     * @param userManageVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> changeEmail(HttpHeaders headers, UserUpdateEmailVO userManageVO);

    /**
     * 修改手机号码（手机校验码验证）时，发送手机短信验证码
     *
     * @param headers Http头部信息
     * @return 操作结果
     */
    Wrapper<Void> sendChangePhoneSmsCode(HttpHeaders headers);

    /**
     * 修改手机号码（手机校验码验证）时，检查手机短信验证码是否正确
     *
     * @param headers   Http头部信息
     * @param smsCodeVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> checkPhoneSmsCode(HttpHeaders headers, SmsCodeVO smsCodeVO);

    /**
     * 修改手机号码（邮箱验证）时，发送邮件验证码
     *
     * @param headers Http头部信息
     * @return 操作结果
     */
    Wrapper<Void> sendChangePhoneEmailCode(HttpHeaders headers);

    /**
     * 修改手机号码（邮箱验证）时，检查邮件验证码是否正确
     *
     * @param headers   Http头部信息
     * @param smsCodeVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> checkChangePhoneEmailCode(HttpHeaders headers, SmsCodeVO smsCodeVO);

    /**
     * 修改手机号码时，向新手机号码发送短信验证码
     *
     * @param headers Http头部信息
     * @param phoneVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> sendChangePhoneSmsCodeToNew(HttpHeaders headers, PhoneVO phoneVO);

    /**
     * 修改手机号码时，检查向新手机号码发送的短信验证码是否正确
     *
     * @param headers   Http头部信息
     * @param smsCodeVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> checkNewPhoneSmsCode(HttpHeaders headers, PhoneSmsVO smsCodeVO);

    /**
     * 修改手机号
     *
     * @param headers      Http头部信息
     * @param userManageVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> changePhone(HttpHeaders headers, UserUpdatePhoneVO userManageVO);

    /**
     * 重置支付密码时，发送手机短信验证码
     *
     * @param headers Http头部信息
     * @return 操作结果
     */
    Wrapper<Void> sendChangePayPswSmsCode(HttpHeaders headers);

    /**
     * 重置支付密码时，检查手机短信验证码是否正确
     *
     * @param headers   Http头部信息
     * @param smsCodeVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> checkChangePayPswSmsCode(HttpHeaders headers, SmsCodeVO smsCodeVO);

    /**
     * 手机校验码验证后，修改支付密码
     *
     * @param headers      Http头部信息
     * @param userManageVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> changePayPassword(HttpHeaders headers, UserUpdatePayPasswordVO userManageVO);


    /**
     * 平台后台 - 更改用户密码
     *
     * @param headers    Http头部信息
     * @param passwordVO 接口参数
     * @return 修改结果
     */
    Wrapper<Void> updatePlatformUserPassword(HttpHeaders headers, PlatformUpdatePasswordVO passwordVO);

    /**
     * 账户安全-实名验证-显示已实名认证的信息
     *
     * @param headers Http头部信息
     * @return 操作结果
     */
    Wrapper<UserAccountAuthQueryVO> getUserInfo(HttpHeaders headers);

    /**
     * 账户安全-实名验证-上传身份证信息
     *
     * @return 操作结果
     */
    Wrapper<UserAccountAuthQueryVO> uploadIdCard(UserUploadIdCardVO userUploadIdCardVO);

    /**
     * 账户安全-实名验证-保存身份证信息
     * @param headers Http头部信息
     * @param userAuthInfoVO 实名信息请求体
     * @return 操作结果
     */
    Wrapper<Void> saveAuthInfo(HttpHeaders headers, UserAuthInfoVO userAuthInfoVO);
}
